package kontrollag;
import modellag.*;


/**
 * Klassen KundeCtr haandterer Controlleren for kunde
 * @author Gruppe 1
 * @version 2.0
 */
public class KundeCtr
{
    private PersonContainer pContainer;
    private static KundeCtr instance;

    /**
     * Constructor for objekter af klassen KundeCtr
     */
    private KundeCtr()
    {
        pContainer = PersonContainer.getInstance();
    }

    /**
     * Implementering af singleton
     */
    public static KundeCtr getInstance()
    {
        if(instance == null)
        {
            instance = new KundeCtr();
        }
        return instance;
    }
   
    /**
     * Opretter et objekt af typen Kunde og tilfoejer objektet til en arrayliste i PersonContainer.
     * @param fornavn Kundens fornavn
     * @param efternavn Kundens efternavn
     * @param adresse Kundens adresse
     * @param postNr Kundens post nr.
     * @param by Kundens by
     * @param telefonNr Kundens telefon nummer
     * @param eMail Kundens e-mail
     * @param kundetype Kundens type
     */
    public boolean opretKunde(String fornavn, String efternavn, String adresse,
            String postNr, String by, String telefonNr, String eMail, boolean kundetype)
    {
        boolean resultat = false;
        try
        {
            Kunde k = new Kunde(fornavn,
            efternavn, adresse,postNr, by, telefonNr, eMail, kundetype);
            pContainer.tilfoejPerson(k);
            pContainer.tilfoejKunde(k);
            resultat = true;
        }
        catch (Exception e)
        {
            resultat = false;
        }
        return resultat;
    }
   
    /**
     * Finder en kunde ud fra et kundeID
     * @return Person
     */
    public Kunde findKunde(int id)
    {
       int index = 0;
       boolean fundet = false;
       int KundeID = id;
       Kunde k = null;
       while(index < pContainer.personer().size() && !fundet)
       {
         Person p = pContainer.hentPerson(index);
         if(KundeID == p.getPersonID() && p instanceof Kunde)
         {
             fundet = true;
             k = (Kunde) pContainer.hentPerson(index);
         }
         index ++;
       }

       return k;
    }
    /**
     * Sletter et objekt af typen Kunde
     * @param id
     */
    public void sletKunde(int id)
    {
    	boolean fundet = false;
        int index = 0;
        while(index < pContainer.personer().size() && !fundet)
        {
                Person person = pContainer.hentPerson(index);
               
                if(person.getPersonID() == id){
                        pContainer.sletPerson(index);
                        fundet = true;
                }
                index++;
        }
        
        boolean fundet2 = false;
        int index2 = 0;
        while(index2 < pContainer.kunder().size() && !fundet2)
        {
                Person person2 = pContainer.hentKunde(index2);
               
                if(person2.getPersonID() == id){
                        pContainer.sletKunde(index2);
                        fundet2 = true;   
                }
                index2++;
        }
       
    }
    /**
     * Redigere et objekt af typen Kunde
     * @param id
     * @param fornavn
     * @param efternavn
     * @param adresse
     * @param postNr
     * @param by
     * @param telefonNr
     * @param eMail
     * @param kundetype
     */
    public void redigerKunder(int id, String fornavn, String efternavn, String adresse,
            String postNr, String by, String telefonNr, String eMail, boolean kundetype)
    {
        Kunde k = findKunde(id);
        k.setFornavn(fornavn);
        k.setEfternavn(efternavn);
        k.setAdresse(adresse);
        k.setPostNr(postNr);
        k.setBy(by);
        k.setTelefonNr(telefonNr);
        k.seteMail(eMail);
        k.setKundeType(kundetype);         
    }
   
    /**
     * Laver arraylisten om til array, saa den kan bruges til JTable
     * @return En to dimensionel array af typen String
     */
    public String[][] listeTilArray()
    {
       int index = 0;
       int arrayIndex = 0;
       int sizeIndex = 0;
       int arraySize = 0;
       
       while(sizeIndex < pContainer.personer().size())
       {
           Person p = pContainer.hentPerson(sizeIndex);
           if(p instanceof Kunde)
           {
                   arraySize++;
           }
           sizeIndex++;
       }
       
       String indhold[][] = new String[arraySize][9];
       
       while(index < arraySize)
       {
         Person p = pContainer.hentKunde(index);
         if(p instanceof Kunde)
         {
           indhold[arrayIndex][0] = Integer.toString(p.getPersonID());
           indhold[arrayIndex][1] = p.getFornavn();
           indhold[arrayIndex][2] = p.getEfternavn();
           indhold[arrayIndex][3] = p.getAdresse();
           indhold[arrayIndex][4] = p.getPostNr();
           indhold[arrayIndex][5] = p.getBy();
           indhold[arrayIndex][6] = p.getTelefonNr();
           indhold[arrayIndex][7] = p.geteMail();
           if(((Kunde) p).getKundeType()) {
                   indhold[arrayIndex][8] = "Ervherv";
           } else {
                   indhold[arrayIndex][8] = "Privat";
           }
           arrayIndex++;
                   
         }
         
         index++;
       }

       return indhold;
    }
   
    /**
     * Laver arraylisten om til array, saa den kan bruges til JTable i OpretOrdreFrame.
     * @param soegefelt 
     * @return En to dimensionel array af typen String
     */
    public String[][] listeTilArrayOpretOrdre(String soegefelt)
    {
       int index = 0;
       int arrayIndex = 0;
       int sizeIndex = 0;
       int arraySize = 0;
       
       while(sizeIndex < pContainer.personer().size())
       {
           Person p = pContainer.hentPerson(sizeIndex);
           if(p instanceof Kunde)
           {
               if(soegefelt.equals("")){
            	   arraySize++;
               }
                   
               if(soegefelt.toLowerCase().equals(p.getFornavn().toLowerCase()))
               {
                   arraySize++;
               }
               
               else if(soegefelt.toLowerCase().equals(p.getFornavn().toLowerCase() + " " +  p.getEfternavn().toLowerCase()))
               {
                   arraySize++;
               }
               
               else if(soegefelt.toLowerCase().equals(p.getEfternavn().toLowerCase()))
               {
                   arraySize++;
               }
               
               else if(soegefelt.toLowerCase().equals(p.getTelefonNr().toLowerCase()))
               {
                   arraySize++;
               }
           }
           sizeIndex++;
       }
       
       String indhold[][] = new String[arraySize][4];
       
       
       while(index < pContainer.kunder().size())
       {
         Person p = pContainer.hentKunde(index);
         if(p instanceof Kunde)
         {
           if(soegefelt.equals("")){
               indhold[arrayIndex][0] = Integer.toString(p.getPersonID());
               indhold[arrayIndex][1] = p.getFornavn();
               indhold[arrayIndex][2] = p.getEfternavn();
               indhold[arrayIndex][3] = p.getTelefonNr();
               arrayIndex++;
           }
           if(soegefelt.toLowerCase().equals(p.getFornavn().toLowerCase()))
           {
               indhold[arrayIndex][0] = Integer.toString(p.getPersonID());
               indhold[arrayIndex][1] = p.getFornavn();
               indhold[arrayIndex][2] = p.getEfternavn();
               indhold[arrayIndex][3] = p.getTelefonNr();
               arrayIndex++;
           }
           
           if(soegefelt.toLowerCase().equals(p.getFornavn().toLowerCase() + " " +  p.getEfternavn().toLowerCase()))
           {
               indhold[arrayIndex][0] = Integer.toString(p.getPersonID());
               indhold[arrayIndex][1] = p.getFornavn();
               indhold[arrayIndex][2] = p.getEfternavn();
               indhold[arrayIndex][3] = p.getTelefonNr();
               arrayIndex++;
           }
           
           if(soegefelt.toLowerCase().equals(p.getEfternavn().toLowerCase()))
           {
               indhold[arrayIndex][0] = Integer.toString(p.getPersonID());
               indhold[arrayIndex][1] = p.getFornavn();
               indhold[arrayIndex][2] = p.getEfternavn();
               indhold[arrayIndex][3] = p.getTelefonNr();
               arrayIndex++;
           }
           if(soegefelt.toLowerCase().equals(p.getTelefonNr().toLowerCase()))
           {
               indhold[arrayIndex][0] = Integer.toString(p.getPersonID());
               indhold[arrayIndex][1] = p.getFornavn();
               indhold[arrayIndex][2] = p.getEfternavn();
               indhold[arrayIndex][3] = p.getTelefonNr();
               arrayIndex++;
           }
         }
         index++;
       }

       return indhold;
    }
}
